/**
 * 判断是否是外部链接
 * @param path 路径
 * @returns 
 */
export function isExternal(path: string) {
    return /^(https?:|mailto:|tel:)/.test(path)
}




/**
 * 查找父级元素第一个 paths 的函数
 * @param routePath 路径
 * @param routes 路由
 * @returns 
 */
export function findFirstParentPaths(routePath: string, routes: any[]): string | null {
    // 检查路径是否存在于路由配置中
    function findMatchingRoute(path: string, routes: any[]): any {
        for (const route of routes) {
            if (route.path === path) {
                return route;
            }
            
            if (route.children && route.children.length > 0) {
                const found = findMatchingRoute(path, route.children);
                if (found) return found;
            }
        }
        return null;
    }

    // 查找匹配的路由项
    const matchedRoute = findMatchingRoute(routePath, routes);
    if (!matchedRoute) return null;

    // 找到第一级父路由
    for (const route of routes) {
        if (routePath.startsWith(route.path) && route.path !== '/') {
            return route.path;
        }
    }

    return null;
}

/**
 * 通过第一级菜单路径获取其下第一个MenuType.MENU类型的完整路径
 * @param parentPath 一级菜单路径
 * @param routes 路由配置
 * @param menuType 需要查找的菜单类型（默认为MENU=2）
 * @returns 完整路径或当前路径
 */
export function findFirstMenuPath(parentPath: string, routes: any[], menuType: number = 2): string {
    
    // 查找父路径对应的路由
    const parentRoute = routes.find(route => route.path === parentPath);
    if (!parentRoute || !parentRoute.children || parentRoute.children.length === 0) {
        return parentPath; // 如果没有找到父路由或子路由，返回当前路径
    }

    // 递归查找第一个指定类型的菜单
    function findFirstMenuInRoutes(routes: any[], currentPath: string): string | null {
        for (const route of routes) {
            
            // 构建完整路径
            // 如果是相对路径，需要与父路径结合
            const fullPath = route.path.startsWith('/') 
                ? route.path 
                : `${currentPath}/${route.path}`;
                
            
            // 如果找到指定类型的菜单，直接返回完整路径
            if (route.meta && route.meta.type === menuType) {
                return fullPath;
            }
            
            // 递归查找子路由
            if (route.children && route.children.length > 0) {
                const childPath = findFirstMenuInRoutes(route.children, fullPath);
                if (childPath) {
                    return childPath;
                }
            }
        }
        return null;
    }

    // 查找第一个菜单路径，如果没找到则返回当前路径
    const menuPath = findFirstMenuInRoutes(parentRoute.children, parentPath);
    return menuPath || parentPath;
}

/**
 * 获取考虑基础路径的完整路由路径
 * @param path 路径
 * @returns 完整路径
 */
export function getFullPath(path: string): string {
    const base = import.meta.env.BASE_URL || '/'
    // 确保路径前带有/
    if (!path.startsWith('/')) {
        path = `/${path}`
    }
    
    // 如果base是/，直接返回path
    if (base === '/') {
        return path
    }
    
    // 否则，拼接base和path
    // 确保base以/结尾
    const cleanBase = base.endsWith('/') ? base : `${base}/`
    // 确保path不以/开头
    const cleanPath = path.startsWith('/') ? path.substring(1) : path
    
    return `${cleanBase}${cleanPath}`
}

export function keepFirst(str: string): string {
    const firstSlashIndex = str.indexOf('/');
    if (firstSlashIndex === -1) {
        return '';
    }
    const secondSlashIndex = str.indexOf('/', firstSlashIndex + 1);
    if (secondSlashIndex === -1) {
        return str;
    }
    return str.slice(0, secondSlashIndex);
}






/**
 * @description 添加单位
 * @param {String | Number} value 值 100
 * @param {String} unit 单位 px em rem
 */
export const addUnit = (value: string | number, unit = 'px') => {
    return !Object.is(Number(value), NaN) ? `${value}${unit}` : value
}
